// 树的重心模板（搬运自acwing）
#include <iostream>
#include <cstring>
using namespace std;

const int N = 1e5 + 10,M = N * 2;

int idx,h[N],e[M],ne[M];
bool st[N];   //存储哪些点被遍历过了
int n;

int ans = N;    //全局答案，最小的最大值
int cent = -1;

void add(int a,int b);

int dfs(int u);

int main(){

    cin>>n;
    memset(h, -1, sizeof h);
    for(int i = 0;i<n-1;i++){
        int a,b;
        cin>>a>>b;
        add(a,b);
        add(b,a);
    }

    dfs(1);
    cout<<cent << ' ' << 1+ans<<endl;

    return 0;
}

void add(int a,int b){
    e[idx] = b;
    ne[idx] = h[a];
    h[a] = idx++;

}


//树和图的深度优先搜索
//返回以u为根的子树中节点的数量
int dfs(int u){

    int sum = 1;   //当前树的大小
    int res = 0;   //当前点删除后每个子树的最大值
    st[u] = true;   //标记一下，已经被搜过了
    for(int i = h[u];i != -1 ; i = ne[i]){
        int j = e[i];
        if(!st[j]){
            int t = dfs(j);
            res = max(res,t);
            sum += t;
        }


    }

    res = max(n - sum,res);
    //ans = min(ans,res);
    if (res < ans) {
        ans = res;
        cent = u;
    }
    
    if (res == ans && u < cent) cent = u;
    return sum;

}